CESI HumanForYou

L'entreprise de produits pharmaceutiques HumanForYou basée en Inde emploie environ 4000 personnes. Cependant, chaque année elle subit un turn-over d'environ 15% de ses employés nécessitant de retrouver des profils similaires sur le marché de l'emploi.

La direction trouve que ce niveau de turn-over n'est pas bon pour l'entreprise car :

Le direction fait donc appel à notre équipe, spécialistes de l'analyse de données, pour déterminer les facteurs ayant le plus d'influence sur ce taux de turn-over et lui proposer des modèles afin d'avoir des pistes d'amélioration pour donner à leurs employés l'envie de rester.

Table des matières

  1. Préparation de l'environnement
    1. Importation des librairies
    2. Importation des données
  2. Visualisation des données
    1. Données du service des ressources humaines
    2. Dernière évaluation du manager
    3. Enquête qualité de vie au travail
    4. Horaires de travail
  3. Transformation des données
    1. Calcul des durées de travail
    2. Concaténation des données
    3. Ajout de valeur
    4. Suppression colonne
    5. Normalisation
    6. Standardisation
    7. Ethique
    8. Création des jeux de données
  4. Analyses statistiques
    1. Analyse de l'attrition
    2. Analyse des données entrantes
  5. Algorithmes
  6. Evaluation des modèles
    1. Première évaluation
    2. Hyperparameter tuning
    3. Deuxième évaluation
    4. Comparaison des courbes ROC
  7. Conclusion

Préparation de l'environnement

Importation des librairies

Tout d'abord, nous devons importer toutes les bibliothèques que nous utiliserons.

Importation des données

Les données utilisées pour nos analyses proviennent de fichier CSV depuis Github et doivent être charger dans nos variables.

Visualisation des données

Dans un premier temps, nous regardons toutes les données que nous avons. Un certain nombre de données concernant les employés nous a donc été transmis par le service des ressources humaines ainsi que par des fiches d'évaluation.

Les données ont été anonymisées : un employé de l'entreprise sera représenté par le même EmployeeID dans l'ensemble des fichiers qui suivent.

Données du service des ressources humaines

Pour chaque employé, le service des ressources humaines vous confie les informations en sa possession :

Il est aussi intéressant de connaitre le type des variables qui composent le fichier.

Dernière évaluation du manager

Ce fichier contient la dernière évaluation de chaque employé faite pas son manager en février 2015.

Il contient les données suivantes :

Type des données :

Enquête qualité de vie au travail

Ce fichier provient d'une enquête soumise aux employés en juin 2015 par le service RH pour avoir un retour concernant leur qualité de vie au travail.

Une organisation avait été mise en place pour que chacun puisse répondre à ce questionnaire sur son lieu de travail en concertation avec les managers mais il n'y avait pas d'obligation.

Les employés devaient répondre à 3 questions sur le niveau de satisfaction concernant :

Lorsque un employé n'a pas répondu à une question, le texte "NA" apparaît à la place de la note.

Type des données :

Horaires de travail

Des badgeuses sont installées et utilisées dans l'entreprise depuis quelques années. Il a été jugé opportun par la direction de nous transmettre les horaires d'entrée et de sortie des employés sur une période de l'année choisie représentative d'une activité moyenne pour l'ensemble des services.

Nous avons donc 2 fichiers traçants les horaires d'arrivée à leur poste et de départ de leur poste de l'ensemble des employés par date sur une période allant du 1er janvier au 31 décembre 2015.

Données d'arrivée des employés:

Type des données :

Données de départ des employés:

Type des données :

Transformation des données

Plusieurs données ne peuvent pas être exploiter en l'état, il faut donc trier et retravailler les données.

Calcul des durées de travail

Les données de temps ne sont pas exploitables sous cette forme, il faut donc les tranformer.

Avoir des heures d'entrées et de sortie de nos employés n'est pas très significatifs, c'est pour cela que nous remplaçons toutes les valeurs par la moyenne de temps de travail de chaque employé.

Cependant :

Pour remédier à ça, nous transformons les données en objet Datetime. De plus lorsqu'un employé est absent au travail, son temps moyen de travail est de 0 donc nous remplaçons les NaN par 0.

Avant de mettre en place nos changements, nous devons renommer la colonne (sans nom) qui correspond aux IDs des employés. Cette actions est prise puisque dans le csv nous avons le même nombre de ligne que sur les autres csv.

On transforme nos chaines de caractère en objets datetime.

On calcule dans un nouveau dataset le nombre d'heure passé qu'en employé passe au travail par jour.

Nous ajoutons ensuite une colonne représentant :

Les autres colonnes sont ensuite supprimées.

Concaténation des données

Pour la suite des analyses, nous allons rassembler toutes les données sur une même variable. Comme sur chaque csv, l'ID des employés est inscrit, il est facile de concater les données.

A l'aide des informations précédentes, nous remarquons plusieurs choses:

Pour la suite des analyses, nous devons d'abord harmoniser nos données pour ne plus avoir les deux remarques précédentes.

Ajout de valeur

Pour palier au manque de certaines données, nous comblons les valeurs manquantes par la valeur médiane de ses champs.

Suppression de colonne

Il est important de vérifier qu'il n'y est pas des champs avec valeur similaire partout. Cela signifit que l'information n'est pas pertinente et qu'elle peut être supprimer.

A l'aide de ce tableau, nous remarquons qu'il existe des champs à valeur unique :

Nous supprimons donc ces champs pour la suite des travaux.

Normalisation

Comme dans la suite de ce projet nous devrons utiliser des algorithmes de machine learning, il est important de prendre en compte les recommandations de ses derniers. Comme de nombreux algorithmes d'apprentissage automatique ne peuvent pas fonctionner directement sur des données qualitatives, nous devons prévoir un ensemble de données dont toutes les variables d'entrée et les variables de sortie soient numériques.

Afin de n'avoir que des données quantitatives, nous utilisons le One-hot Encoding. Quand une variables n'est pas ordinale, cette solution va créer des variables supplémentaires dans le jeu de donnée pour représenter chacune des catégories.

Les champs concernés sont : "BusinessTravel","Department","EducationField", "JobRole","MaritalStatus", "Gender". Et vont être remplacés par :

Standardisation

Maintenant que nous avons uniquement des données quantitatives, nous les mettons sur la même échelle à l'aide de la standardisation.

Ethique

Afin de respecter l'éthique des données, nous retirons certains attributs pour la suite de nos analyses. (cf. LivrableEthique.xls)

Création des jeux de données

A la suite de cette section, nous avons deux ensembles de données nettoyés et complets:

Analyses statistiques

Nous séparons nos données en deux parties :

Pour cela, nous allons analyser nos deux groupes.

Analyse de l'attrition

Tout d'abord nous regardons la répercution de l'attrition sur tous nos attributs.

Courbes de densité superposées

A l'aide des courbes de densité superposées, nous regardons la répartition des valeurs quantitatives pour chaque variables en fonction de l'attrition.

Analyse des histogrammes:

  1. MonthlyIncome : Il est clair que les employés qui ont un revenu plus élevé restent plus longtemps dans l'entreprise.

  2. PercentSalaryHike : Les employés dont les revenus augmentent davantage restent plus longtemps dans l'entreprise.

  3. TrainingTimesLastYear : Aucune tendance dans l'attrition par rapport au nombre de formations.

  4. AbsencesPerDay : Aucune tendance dans l'attrition par rapport au nombre de jours d'absence.

  5. MeanTimeWorkOverYear2015 : Il y a une tendance claire, les employés qui travaillent plus d'heures ont le taux d'attrition le plus élevé.

  6. YearsAtCompany : Les employés qui restent plus longtemps dans l'entreprise ont un taux d'attrition plus faible.

  7. YearSinceLastPromotion : Aucune tendance dans l'attrition par rapport au nombre d'années depuis la dernière promotion.

Cependant comme nous voyons peu de différence à l'oeil nu, nous allons dans un deuxième temps des boites à moustache.

Boîtes à moustache

A l'aide de boites à moustache, nous regardons la répartition des valeurs quantitatives pour chaque variables en fonction de l'attrition.

Histogrammes

A l'aide des histogrammes, nous regardons la répartition des valeurs qualitatives pour chaque variables en fonction de l'attrition.

Afin de mieux comprendre nos histogrammes, nous les détaillons.

  1. BusinessTravel : On observe une grosse tendance des employés qui voyages fréquemment ont plus de chance de quitter l'entreprise comparé aux employés qui ne voyagent.

  2. Departement : Les employés dans le département HR ont plus de chance de quitter l'entreprise que les autres employés dans les autres départements.

  3. Education : Ici le niveau d'éducation ne paraît pas significatif concernant les chances qu'un employé quitte l'entreprise.

  4. EducationField : Comme pour le département HR, les employés qui ont étudié dans le domaine HR ont plus de chance de quitter l'entreprise.

  5. JobLevel : Le niveau hiérarchique d'un employé n'affecte presque pas l'attrition d'un employé. Mais on peut constater une légère réduction de l'attrition si un employé a un plus haut niveau hiérarchique élevé.

  6. JobRole : Research Director et Research Scientist ont tendende à avoir une plus grande attrition que le reste des autre métiers dans l'entreprise. Le métier de Sale Executives tend vers une attrition légèrement élevée.

  7. NumCompaniesWorked : Il n'y a pas de tendance claire dans l'attrition par rapport au nombre d'entreprises dans lesquelles les employés ont travaillé. Cependant, les employés qui ont travaillé dans plus de 4 entreprises sont plus enclins à quitter l'entreprise.

  8. JobInvolvement : Les employés qui s'impliquent peu dans leur travail ont tendance à avoir un pourcentage d'attrition plus élevé.

  9. EnvironmentSatisfaction : L'attrition diminue lorsque la satisfaction de l'environnement augmente. En effet on remarque que l'attrition est très élevé si la satisfaction de l'environnement est faible.

  10. JobSatisfaction : L'attrition diminue lorsque la satisfaction au travail augmente.

  11. WorkLifeBalance : Les employés ayant un mauvais équilibre entre vie professionnelle et vie privée ont un pourcentage d'attrition plus élevé.

Analyste des données entrantes

Maintenant que nous avons vu les répercutions de l'attrition sur nos données, nous regardons plus en détails nos données entrantes ainsi que leur corrélation.

Histogramme

Concernant les données quantitatives, nous affichons nos valeurs de façon visuelle afin d'avoir un meilleur appercu de l'allure de nos données.

Corrélation des données

Maintenant nous voulons voir si nos valeurs possèdent des liens entre-elles. Pour cela nous utilisons une matrice de corrélation. Elle permet d'évaluer la dépendence entre plusieurs variables en même temps. Le résultat est une table contenant les coefficients de corrélation entre chaque variable et les autres.

On parle de corrélation quand le coefficient de corrélation est au-dessus de 0.7. On voit ici que plusieurs colonnes corrèlent entre-elles. Afin d'éviter de biaiser notre modèle à cause de la multi-collinéarité. Il faudra donc supprimer certaines colonnes. En fonction des études statistiques, nous avons choisis de garder :

Conclusion des analyses

Pour conclure sur cette partie, nous remarquons que les employés des ressources humaines sont très enclins à démissionner avec un taux d'attrition de 30%. De même pour les employés ayant une formation en ressources humaines ont un taux d'attrition de 41%.

31% des employés qui ont démissionné avaient un mauvais équilibre entre vie professionnelle et vie privée.

Les employés qui voyagent fréquemment sont également très enclins à démissionner, avec un taux d'attrition de 25 %.

Les employés des niveaux inférieurs démissionnent plus souvent que les employés des niveaux supérieurs.

Les employés du département de recherche (directeurs de recherche et chercheurs) sont également enclins à démissionner, avec un taux d'attrition moyen de 21%.

Les employés qui ont travaillé dans plus de 4 entreprises ont un taux d'attrition beaucoup plus élevé que les autres.

L'attrition diminue avec l'augmentation de la satisfaction environnementale, de la satisfaction au travail et de l'implication dans le travail.

Algorithmes

Afin de trouver le modèle offrant les meilleures performances dans notre cas, nous allons en tester plusieurs et selectionner le modèle aillant les meileurs résultats. Les modèles testés sont :

Evaluation des modèles

Maitenant que nous avons entrainer nos modèles, il est temps de voir s'ils sont performants.

Première évaluation

Nous allons évaluer nos différents modèles en utilisant notre jeu d'entrainement. Pour cela nous allons calculer les valeurs de plusieurs variables pour notre modèle :

Hyperparameter tuning

Maintenant, nous allons voir s'il est possible d'optimiser les paramétrages des algorithmes pour améliorer nos scores.

Nous utisons la fonction GridSearchCV pour automatiser ce travail. Il faut lui fournir les valeurs à tester pour chaque hyperparamètre. Toutes les combinaisons sont évaluées par cross-validation.

Détails des paramètres pris en compte pour la suite de nos entrainements de modèles:

Param reglog
Param knn
Param random_forest :
Param preceptron :
Param descente de gradient stochastique (mini-batch size) :

Regression hyperparameter tuning

KNNeighboors hyperparameter tuning

Random Forest hyperparameter tuning

Perceptron hyperparameter tuning

Descente de Gradient Stochastique hyperparameter tuning

Résumé

Voici le tableau récapitulatif avec pour chaque algorithme les meilleurs paramètres ainsi que leur score.

Deuxième évaluation

On cherche ici à mesurer les performances des différentes algorithmes pour définir lequel est le plus adapté à notre problème. Pour cela nous allons définir des fonctions permettant d'afficher des courbes (Précision/Recall, ROC...).

Une fois les différentes fonctions définies, nous allons créer une liste de label pour évaluer nos modèles.

Nous allons donc maintenant évaluer nos différents modèles en utilisant notre jeu de test. Pour cela nous allons calculer les valeurs de plusieurs variables (precision, recall et f1 score) pour notre modèle. De plus pour compléter cette analyse nous allons utiliser des courbes pour mieux mettre en relation les valeurs obtenues.

Regression logistique

Nous allons donc maintenant regarder les statistiques que nous donne l'algorithme de régression logistique

KNN

Nous allons maintenant observer le score de notre algorithme KNN.

Random Forest

Nous allons maintenant évaluer notre algorithme Random Forest.

Perceptron

Nous allons maintenant observer les performances de notre algorithme Perceptron.

Descente de gradient stochastique

Nous allons maintenant observer les performances de l'algorithme des descente de gradient stochastique.

Comparaison des courbes ROC

Une fois les différentes statistiques affiché pour nos algorithmes, nous devons les comparer pour choisir celui qui sera le plus adapté à notre problème.

Nous avons donc affiché les courbes ROC de tous nos algorithmes, nous permettant donc de sélectionner le meilleur. Ici, nous constatons sans grande surprise que l'algorithme Random Forest est le plus adapté.

Nous pouvons donc voir que notre modèle prédit correctement l'attrition sur notre jeu de données, l'attrition étant sur celui-ci de 16% pour une approximation à 15% donnée par l'entreprise auparavant.

Conclusion

Suite à notre prédiction, nous pouvons mettre en évidence les différentes features qui influent sur l'attrition, et donc le taux de turn-over.

Ces différentes fonctions nous permettent donc de mettre en évidence ces features (au dessus de 0.06), qui sont :

Nous allons donc parmis ces 5 features choisir celles qui peuvent être influencées par l'entreprise, YearsAtCompany et TotalWorkingYears ne permettant pas de solution facile à mettre en place nous n'allons pas les étudier ici.

Etude des features

MeanTimeWorkOverYear2015

Nous allons étudier dans quels cas les employés sont plus susceptibles de quitter l'entreprise en fonction de leur temps moyen de travail.

Nous pouvons voir les tendances suivantes grâce à ce graphique :

Nous allons donc simuler une réduction des horaires de travail pour observer si cela nous permet de réduire significativement l'attrition.

On peut ainsi voir que si les employés travaillent 30 minutes de moins par jour (soit 2h30 par semaines) on peut faire descendre l'attrition à 14,6% au lieu de 16% auparavant. Cette piste est viable, car en adaptant les horaires des salariés, l'entreprise peut diminuer significativement l'attrition.

MonthlyIncome

Nous allons étudier dans quels cas les employés sont plus susceptibles de quitter l'entreprise en fonction de leur salaire par mois.

Nous pouvons voir deux tendances grâce à ce graphique :

Nous allons donc simuler une augmentation des salaires pour les employés ciblés pour voir si cela influera significativement notre attrition.

Une fois le modèle entrainé, en simulant une augmentation de 25% du salaire de nos employés, nous avons pu obtenir une attrition de 14.36%. Cette piste peut donc elle aussi être mise en place par l'entreprise pour réduire son attrition.

DistanceFromHome

Nous allons étudier dans quels cas les employés sont plus susceptibles de quitter l'entreprise en fonction de la distance entre leur lieu de résidence et leur travail.

Ce graphique nous apprend que la distance entre le domicile des salariés et l'entreprise n'influe pas sur l'attrition, seulement certains cas comme 15km et 19km. Cette feature étant peu significative, nous allons quand même effectuer une proposition, prenant en compte la mise en place de télétravail pour les salariés à hauteur de 25%.

Nous avons pu entrainer le modèle pour obtenir les résultats suivants : 14.6% d'attrition, en mettant 25% du temps les salariés en télétravail. Cette piste peut donc être suivit par l'entreprise pour diminuer son attrition.

Pistes à suivre

Nous avons donc vu que trois des nos cinqs paramètres peuvent être adapté pour réduire l'attrition. Nous pouvons donc proposer des solutions pour ceux-ci :